﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace _44文件流
{
    internal class Program
    {
        private static void Main1(string[] args)
        {
            string path = @"C:\Users\UnityPC\Desktop\新建文本文档 (3).txt";
            //创建一个文件流
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None);
            byte[] array = new byte[1024];//1kb的缓冲区
            FileStream fsWrite = new FileStream(@"D:\新建文本文档 (3).txt", FileMode.Create, FileAccess.Write);
            while (true)
            {
                //读
                int length = fs.Read(array, 0, array.Length); //length是真实读取到的字节数
                if (length == 0)
                {
                    break;
                }
                // string str = Encoding.UTF8.GetString(array, 0, length);//解码
                // Console.Write(str);
                //写
                fsWrite.Write(array, 0, length);
                Console.WriteLine("文件共{0}字节,本次读取{1}字节,当前位置{2}", fs.Length, length, fs.Position);
                Console.ReadLine();
            }
            fsWrite.Flush();//注意:写入流在写入完成后需要调用Flush(),把底层缓冲区的数据全部写入文件
            Console.WriteLine("复制完成");
            fs.Close();//注意:流使用完,必须关闭,否则会一致占用电脑的资源(文件流则占用文件)
            fsWrite.Close();

            //可以使用下面的using块来自动关闭文件流,就可以不用写Close   参考Mian2
            // using (创建文件流的代码)
            // {
            //     //代码出这个块(大括号),会自动关闭文件流
            // }
        }

        private static void Main(string[] args)
        {
            string path = @"C:\Users\UnityPC\Desktop\新建文本文档 (3).txt";

            using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None), fsWrite = File.Create(@"D:\新建文本文档 (3).txt"))
            {
                byte[] array = new byte[1024];//1kb的缓冲区

                while (true)//重复读写
                {
                    int length = fs.Read(array, 0, array.Length); //length是真实读取到的字节数
                    if (length == 0)
                    {
                        break;
                    }
                    fsWrite.Write(array, 0, length);
                }
                Console.WriteLine("复制完成");
            }
        }
    }
}